/******************************************************************************/
/* @ All Rights Reserved Copyright (C) 2014 broada,Ltd.                       */
/*                                                                            */
/*  NAME      = frlog.c                                                       */
/*  NOTE      =                                                               */
/*  DATE      = 2014/11/11 by zhengxd                                         */
/******************************************************************************/
#include "frlog.h"

static zlog_category_t *p_st_log_category = NULL;

/*******************************************************************************
*  FUNC     :  zlog初始化
*  ARGS     :  p_conf_file(配置文件名称)
*           :  p_cat_name(配置文件中log规则名称)
*  RTN      :  0    (成功)
*              非0  (失败)
*  NOTE     :
*******************************************************************************/
int frlog_open(const char *p_conf_file, const char *p_cat)
{
    int i_ret = 0;

    i_ret = zlog_init(p_conf_file);
    if (i_ret)
    {
        return i_ret;
    }

    p_st_log_category = zlog_get_category(p_cat);
    if (p_st_log_category == NULL)
    {
        zlog_fini();
        return -1;
    }
    return 0 ;
}

/*******************************************************************************
*  FUNC     :  不带有文件名,行数，函数的debug出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_debug1(const char *p_fmt , ...)
{
	va_list st_ap;

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	va_start(st_ap , p_fmt);
	vzlog_debug(p_st_log_category, p_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  不带有文件名,行数，函数的info出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_info1(const char *p_fmt , ...)
{
	va_list st_ap;

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	va_start(st_ap , p_fmt);
	vzlog_info(p_st_log_category, p_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  不带有文件名,行数，函数的warn出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_warn1(const char *p_fmt , ...)
{
	va_list st_ap;

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	va_start(st_ap , p_fmt);
	vzlog_warn(p_st_log_category, p_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  不带有文件名,行数，函数的error出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_error1(const char *p_fmt , ...)
{
	va_list st_ap;

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	va_start(st_ap , p_fmt);
	vzlog_error(p_st_log_category, p_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  不带有文件名,行数，函数的fatal出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_fatal1(const char *p_fmt , ...)
{
	va_list st_ap;
	//char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	va_start(st_ap , p_fmt);
	vzlog_fatal(p_st_log_category, p_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  带有文件名,行数，函数的debug出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_debug2(const char *p_file, int i_line
               , const char *p_fun, const char *p_fmt , ...)
{
	va_list st_ap;
	char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	sprintf(arr_new_fmt, "[%s:%u(%s)] %s", p_file, i_line, p_fun, p_fmt);
	va_start(st_ap , p_fmt);
	vzlog_debug(p_st_log_category, arr_new_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  带有文件名,行数，函数的info出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_info2(const char *p_file, int i_line
              , const char *p_fun, const char *p_fmt , ...)
{
	va_list st_ap;
	char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	sprintf(arr_new_fmt, "[%s:%u(%s)] %s", p_file, i_line, p_fun, p_fmt);
	va_start(st_ap , p_fmt);
	vzlog_info(p_st_log_category, arr_new_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  带有文件名,行数，函数的warn出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_warn2(const char *p_file, int i_line
              , const char *p_fun, const char *p_fmt , ...)
{
	va_list st_ap;
	char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	sprintf(arr_new_fmt, "[%s:%u(%s)] %s", p_file, i_line, p_fun, p_fmt);
	va_start(st_ap , p_fmt);
	vzlog_warn(p_st_log_category, arr_new_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  带有文件名,行数，函数的error出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_error2(const char *p_file, int i_line
               , const char *p_fun, const char *p_fmt , ...)
{
	va_list st_ap;
	char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	sprintf(arr_new_fmt, "[%s:%u(%s)] %s", p_file, i_line, p_fun, p_fmt);
	va_start(st_ap , p_fmt);
	vzlog_error(p_st_log_category, arr_new_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  带有文件名,行数，函数的fatal出力
*  ARGS     :  p_file(文件名)
*           :  i_line(行数)
*           :  p_fun(函数)
*           :  p_fmt(出力format)
*  RTN      :  void
*  NOTE     :
*******************************************************************************/
void frlog_fatal2(const char *p_file, int i_line
               , const char *p_fun, const char *p_fmt , ...)
{
	va_list st_ap;
	char arr_new_fmt[1024] = {0x00};

    /* 初始化失败 */
	if (p_st_log_category == NULL)
    {
        return;
    }
	sprintf(arr_new_fmt, "[%s:%u(%s)] %s", p_file, i_line, p_fun, p_fmt);
	va_start(st_ap , p_fmt);
	vzlog_fatal(p_st_log_category, arr_new_fmt, st_ap);
	va_end(st_ap);
	return;
}

/*******************************************************************************
*  FUNC     :  zlog去初始化
*  ARGS     :  void
*  RTN      :  0    (成功)
*              非0  (失败)
*  NOTE     :
*******************************************************************************/
void frlog_close()
{
    zlog_fini();
    p_st_log_category = NULL;

    return;
}
